package cn.uestc.labhms.modules.hms.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * 插入、更新、查询所有表的类
 */
@Mapper
public interface XlsxDao {
//    @Select("select exists(select 1 from ${tableName} where ${fieldName} = #{id})")

    /**
     * 检测该表是否存在该id
     * @param tableName 英文表名
     * @param fieldName 英文字段名
     * @param id 字段值
     * @return 存在：true
     */
    boolean existById(@Param("tableName") String tableName, @Param("fieldName") String fieldName, @Param("id") String id);

    /**
     * 通过Map插入一行数据
     * @param tableName 英文表名
     * @param row 一行数据
     * @return 影响行数
     */
    int insertRowByMap(@Param("tableName") String tableName, @Param("data") Map<String, String> row);

    /**
     * 通过Map更新一行与传入id一致的数据
     * @param tableName 英文表名
     * @param row 数据
     * @param idName id列名
     * @param id id值
     * @return
     */
    int updateRowByMap(@Param("tableName") String tableName,
                       @Param("data") Map<String, String> row,
                       @Param("idName") String idName,
                       @Param("id") String id);

    /**
     * 通过map查询tableName中对应的数据
     * @param tableName
     * @param keyValMap
     * @return
     */
    List<LinkedHashMap<String, String>> conditionsFind(@Param("tableName") String tableName,
                                                       @Param("map") Map<String, String> keyValMap,
                                                       @Param("pageSize") int pageSize,
                                                       @Param("curIndex") int curIndex);
    /**
     * 删除数据
     * @param tableName 英文表名
     * @param idName id列名
     * @param id id值
     * @return
     */
    int deleteRowById(@Param("tableName") String tableName,
                      @Param("idName") String idName,
                      @Param("id") String id);

    /**
     * 通过patientId查询对应表的记录
     * @param tableName
     * @param patientId
     * @return 记录
     */
    List<Map<String, String>> getDataByPatientId(@Param("tableName") String tableName,
                                                 @Param("id") Integer patientId);

    /**
     * 给一张表添加字段
     * @param tableNameE 英文表名
     * @param field 英文字段名
     * @param fieldLen 字段长度
     */
    void addXlsxField(@Param("tableName") String tableNameE,
                      @Param("field") String field,
                      @Param("fieldLen") Integer fieldLen);
}
